Support searching by multiple platforms - #119
Merged
chuckwondo merged 2 commits intoAug 23, 2026
Merged
Conversation
- Update platform() method in GranuleCollectionBaseQuery to accept Union[str, Sequence[str]] - Backward compatible: single string works as before - Multiple platforms passed as list for proper URL formatting (platform[]=...) - Add ValueError for empty/falsy platform values - Add tests for single, multiple, and empty platform cases in both CollectionQuery and GranuleQuery - Update CHANGELOG.md with new feature Closes nasa#80 Co-authored-by: Suhas <suhaslord@users.noreply.github.com>
chuckwondo
requested changes
Aug 22, 2026
chuckwondo
left a comment
Collaborator
There was a problem hiding this comment.
Thanks @suhaslord! Generally looks good, but I've suggested a simplification.
Comment on lines
+795
to
+803
| # Handle string vs sequence of strings | ||
| if isinstance(platform, str): | ||
| self.params['platform'] = platform | ||
| else: | ||
| # Convert sequence to list for proper URL formatting | ||
| platform_list = list(platform) | ||
| if not platform_list: | ||
| raise ValueError("Please provide a value for platform") | ||
| self.params['platform'] = platform_list |
Collaborator
There was a problem hiding this comment.
This should be sufficient, although the existing implementation worked fine if the user passed a list. This simply ensures that a list is constructed for other sequence types since the _build_url method looks specifically for lists when dealing with multiple values:
Suggested change
| # Handle string vs sequence of strings | |
| if isinstance(platform, str): | |
| self.params['platform'] = platform | |
| else: | |
| # Convert sequence to list for proper URL formatting | |
| platform_list = list(platform) | |
| if not platform_list: | |
| raise ValueError("Please provide a value for platform") | |
| self.params['platform'] = platform_list | |
| self.params['platform'] = ( | |
| platform if isinstance(platform, str) else list(platform) | |
| ) |
Apply Chuck Daniels' suggestion to simplify the string-vs-sequence handling. The new implementation keeps the string case as-is and converts any sequence type to list in a single expression. This ensures other sequence types (tuples, etc.) become lists since _build_url specifically looks for list instances when formatting multi-valued parameters. Co-authored-by: Suhas <suhaslord@users.noreply.github.com>
chuckwondo
approved these changes
Aug 23, 2026
chuckwondo
left a comment
Collaborator
There was a problem hiding this comment.
Thank you @suhaslord!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements support for searching by multiple platforms for both
CollectionQueryandGranuleQuery, as requested in issue #80.Changes
Code
cmr/queries.py: Updatedplatform()inGranuleCollectionBaseQueryto acceptUnion[str, Sequence[str]]params['platform'] = platform)platform[]=query paramsValueErrorTests
tests/test_collection.py/tests/test_granule.py: multi-platform + empty-list tests; existing single-platform tests still passDocs
CHANGELOG.md: Unreleased entry for multi-platform supportBehavior
All 129 tests pass.
Closes #80
Submitted from fork as requested by @chuckwondo.